1
平行執行模型:以區塊思維思考
AI023Lesson 5
00:00

從串行的 CPU 程式設計過渡到 GPU 程式設計,需要一次範式轉變:從逐元素迭代轉為 基於區塊的執行。我們不再將資料視為一連串的標量,而是視為可排程以充分利用硬體頻寬的「區塊」集合。

1. 記憶體受限與運算受限

一個核心的瓶頸取決於數學運算次數與記憶體存取次數的比率。 向量加法通常屬於記憶體受限 因為每進行三次記憶體操作(兩次載入、一次儲存)才執行一次加法。硬體花費在等待 DRAM 的時間,遠多於實際計算的時間。

2. BLOCK_SIZE 的角色

BLOCK_SIZE 定義了平行運作的細緻程度。如果太小,我們無法充分運用 GPU 宽廣的執行通道。適當的大小能確保足夠的「飛行中工作」,以達到記憶體匯流排的飽和狀態。

3. 透過佔用率隱藏延遲

佔用率 是 GPU 上活躍區塊的數量。雖然這不是最終目標,但它讓排程器能在某個區塊等待從顯存取得高延遲資料時,切換至另一個新區塊來執行運算。

Roofline 模型概念記憶體受限運算受限山脊點(效率)運算強度(運算次數/位元組)→

4. 硬體使用效率

為了最大化效能,我們必須讓自己的 BLOCK_SIZE 與 GPU 架構的記憶體合併規則保持一致,確保連續的線程能存取連續的記憶體位址。

main.py
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>